#include <stdio.h>
#include <stdlib.h>
//定义常量
#define MAX 1000
#define STR "hello bit"

//定义表达式
#define foever for(;;)//判断条件省略，则判断条件恒为真

//定义相对复杂的代码
#define printNow printf("%s\n%s\n%s\n%d\n%d\n"\
                   , __FILE__, __DATE__, __TIME__\
                   , __LINE__, __STDC__)

//定义宏
#define SQUARE(x) ((x)*(x))//与函数相似

//带有副作用的表达式 => 传入的表达式带++或-- => 会导致多次++或--
#define _MAX(X, Y) ((X) > (Y) ? (X) : (Y))

//宏能做到而函数做不到
#define Malloc(n, type) (type*)malloc(n * sizeof(type))


int main()
{
    //printf("%s\n", __FILE__);//文件编译路径
    //printf("%s\n", __DATE__);//文件编译日期
    //printf("%s\n", __TIME__);//文件编译时刻
    //printf("%d\n", __LINE__);//当前编译行数
    //printf("%d\n", __STDC__);//当前环境是否遵循ANSI C, 如果是, 则值为1, 否则未定义
    
    //int m = MAX;
    //printf("%d\n", MAX);
    //printf("%s\n", STR);
    //printNow;

    //int a = 5;
    //int ret = SQUARE(a);
    //printf("%d\n", ret);

    //int a = 3;
    //int b = 5;
    //int m = _MAX(a++, b++);
    //printf("m = %d\n", m);
    //printf("a = %d\n", a);
    //printf("b = %d\n", b);

    int* p1 = (int*)malloc(10 * sizeof(int));
    int* p2 = Malloc(10, int);
    free(p1);
    free(p2);

    return 0;
}